package com.dxy.netty.jsonserialize;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;

/**
 * @Description JSON序列化 netty服务端处理器
 * @Author dangxianyue
 * @Date 2023/1/8 15:31
 */
public class JsonSerializeNettyServerHandler extends SimpleChannelInboundHandler<RpcRequest> {

    // 读写数据事件（读取客户端发送的消息）
    // 1. ChannelHandlerContext ctx： 上下文信息，包括管道pipeline，通道channel，地址
    // 2. Object msg： 客户端发送的数据，默认是 Object
    @Override
    public void channelRead0(ChannelHandlerContext ctx, RpcRequest rpcRequest) throws Exception {
        System.out.println("收到客户端数据：" + rpcRequest);

        //回复客户端
        RpcResponse rpcResponse = new RpcResponse()
                .setRequestId(rpcRequest.getRequestId())
                .setResult("成功！");
        ctx.writeAndFlush(rpcResponse);
    }

    // 处理异常，关闭通道
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        ctx.channel().close();
    }
}
